#include <iostream>
#include <string>
#include <sstream>
#include "Entity3D.h"
using namespace std;

/**
  * Constructor copia
  *
  */
Entity3D::Entity3D (const Entity3D &entidad) {
	_x = entidad.getX();
	_y = entidad.getY();
	_z = entidad.getZ();
	_name = entidad.getName();
}

/**
  * Destructor
  *
  */
Entity3D::~Entity3D () {
}

/* Recupera la coordenada X */
int Entity3D::getX () const {
	return _x;
}

/* Recupera la coordenada Y */
int Entity3D::getY () const {
	return _y;
}

/* Recupera la coordenada Y */
int Entity3D::getZ () const {
	return _z;
}

/* Recupera el nombre */
string Entity3D::getName () const {
	return _name;
}

/* Setea la coordenada X */
void Entity3D::setX (const int x) {
	_x = x;
}

/* Setea la coordenada Y */
void Entity3D::setY(const int y) {
	_y = y;
}

/* Setea la coordenada Z */
void Entity3D::setZ(const int z) {
	_z = z;
}

/* Setea el nombre */
void Entity3D::setName(const string name) {
	_name = name;
}

/**
  * Sobreescritura del operador de asignación
  *
  */
Entity3D& Entity3D::operator= (const Entity3D &e) {

	if (this != &e) {
		this->_x = e.getX();
		this->_y = e.getY();
		this->_z = e.getZ();
		this->_name = e.getName();
	}
	return *this;
}

/**
  * Devuelve un cadena con todos los atributos del objeto, para ser visualizados
  *
  */
string Entity3D::toString() const {
   stringstream ss;
   ss << "(Pos: [X=" << _x << "] - [Y=" << _y << "] - [Z=" << _z << "]) (Name: " << _name << ")";
   return ss.str();
}
